package org.red5.client.net.ssl;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.GeneralSecurityException;
import javax.net.SocketFactory;
/**
* Simple Socket factory to create sockets with or without SSL enabled. If SSL enabled a "bogus" SSL Context is used (suitable for test
* purposes)
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
public class SslSocketFactory extends SocketFactory {
private static boolean sslEnabled = false;
private static javax.net.ssl.SSLSocketFactory sslFactory = null;
private static javax.net.SocketFactory factory = null;
public SslSocketFactory() {
super();
}
@Override
public Socket createSocket(String arg1, int arg2) throws IOException, UnknownHostException {
if (isSslEnabled()) {
return getSSLFactory().createSocket(arg1, arg2);
} else {
return new Socket(arg1, arg2);
}
}
@Override
public Socket createSocket(String arg1, int arg2, InetAddress arg3, int arg4) throws IOException, UnknownHostException {
if (isSslEnabled()) {
return getSSLFactory().createSocket(arg1, arg2, arg3, arg4);
} else {
return new Socket(arg1, arg2, arg3, arg4);
}
}
@Override
public Socket createSocket(InetAddress arg1, int arg2) throws IOException {
if (isSslEnabled()) {
return getSSLFactory().createSocket(arg1, arg2);
} else {
return new Socket(arg1, arg2);
}
}
@Override
public Socket createSocket(InetAddress arg1, int arg2, InetAddress arg3, int arg4) throws IOException {
if (isSslEnabled()) {
return getSSLFactory().createSocket(arg1, arg2, arg3, arg4);
} else {
return new Socket(arg1, arg2, arg3, arg4);
}
}
public static javax.net.SocketFactory getSocketFactory() {
if (factory == null) {
factory = new SslSocketFactory();
}
return factory;
}
private static javax.net.ssl.SSLSocketFactory getSSLFactory() {
if (sslFactory == null) {
try {
sslFactory = BogusSslContextFactory.getInstance(false).getSocketFactory();
} catch (GeneralSecurityException e) {
throw new RuntimeException("could not create SSL socket", e);
}
}
return sslFactory;
}
public static boolean isSslEnabled() {
return sslEnabled;
}
public static void setSslEnabled(boolean newSslEnabled) {
sslEnabled = newSslEnabled;
}
}